package br.com.esporte.persistence.DAO.impl;

import java.util.List;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import br.com.base.persistencia.DAO.impl.GenericDAOImpl;
import br.com.esporte.model.Grupo;
import br.com.esporte.model.GrupoParticipante;
import br.com.esporte.model.TipoEsporteEnum;
import br.com.esporte.model.Usuario;
import br.com.esporte.persistence.DAO.GrupoParticipanteDAO;
import br.com.esporte.persistence.filter.FiltroGrupoParticipante;
/**
 * @author Milton Domingues
 */
@Repository
public class GrupoParticipanteDAOImpl extends GenericDAOImpl<GrupoParticipante, Long, FiltroGrupoParticipante> implements GrupoParticipanteDAO{

	public GrupoParticipanteDAOImpl() {
		super(GrupoParticipante.class);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<GrupoParticipante> consultarGruposTipoEsporteParticipaUsuario(Usuario usuario, TipoEsporteEnum tipo) {
		StringBuilder hql = new StringBuilder();
		hql.append("SELECT grupoPart FROM GrupoParticipante grupoPart ");
		hql.append("INNER JOIN grupoPart.grupo as grupo ");
		hql.append("WHERE ");
		hql.append("grupo.tipo = :tipo ");
		hql.append("AND ");
		hql.append("grupoPart.participante = :usuario ");
		hql.append("AND ");
		hql.append("grupoPart.aceito = :aceito ");
		hql.append("ORDER BY ");
		hql.append("grupoPart.usuarioInclusao DESC");

		Query query = createQuery(hql.toString());

		query.setParameter("tipo", tipo);
		query.setParameter("usuario", usuario);
		query.setParameter("aceito", true);

		return query.getResultList();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Usuario> consultarUsuariosParticipaGrupo(Grupo grupo) {
		StringBuilder hql = new StringBuilder();
		hql.append("SELECT grupoP.participante FROM GrupoParticipante grupoP WHERE grupoP.grupo = :grupo AND grupoP.aceito = :aceito");

		Query query = createQuery(hql.toString());
		query.setParameter("grupo", grupo);
		query.setParameter("aceito", true);

		return query.getResultList();
	}

}
